package com.dd.cloud.user.service.mechan;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dd.cloud.user.entity.doctor.DoctorDetail;
import com.dd.cloud.user.entity.doctor.DoctorUser;
import com.dd.cloud.user.entity.mechan.MechanRank;
import com.dd.cloud.user.req.mechan.*;
import com.dd.cloud.user.res.mechan.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * <p>
 * 机构层级表 服务类
 * </p>
 *
 * @author czg
 * @since 2022-04-27
 */
public interface IMechanRankService extends IService<MechanRank> {
    /**
     * 获取机构信息
     *
     * @param mechanId
     * @return
     */
    MechanRankDetailRes getMechanRankInfo(Integer mechanId);

    /**
     * 添加机构
     *
     * @param req
     * @return
     */
    MechanRank addMechanRank(MechanRankAddReq req);

    /**
     * excel批量添加机构
     *
     * @param file
     */
    void addMechanRankByExcel(MultipartFile file);

    /**
     * 修改机构
     *
     * @param req
     */
    void updateMechanRank(MechanRankUpdateReq req);

    /**
     * 修改机构状态
     *
     * @param mechanId
     * @param status
     * @param request
     */
    void updateMechanRankStatus(Integer mechanId, Integer status, HttpServletRequest request);

    /**
     * 分页查询机构列表
     *
     * @param req
     * @return
     */
    Page<MechanRankPageRes> getMechanRankPage(MechanRankPageReq req);

    /**
     * 查询机构列表 用来选择机构
     *
     * @param req
     * @return
     */
    List<MechanRankSelectRes> getMechanRankSelect(MechanRankSelectReq req);


    /**
     * 审核机构信息
     *
     * @param req
     */
    void reviewMechanRankInfo(MechanInfoReviewReq req);

    /**
     * 查询机构申请审核记录
     *
     * @param req
     * @return
     */
    IPage<MechanRankApplyPageRes> queryMechanRankApplyPage(MechanRankApplyPageReq req);

    /**
     * 查询机构审核列表
     *
     * @param req
     * @return
     */
    IPage<MechanRankReviewPageRes> queryMechanRankReviewPage(MechanRankReviewPageReq req);

    /**
     * 获取机构的名字
     *
     * @param mechanId
     * @return
     */
    String queryMechanName(Integer mechanId);

    /**
     * 查询不存在的机构id
     */
    List<Integer> queryNotExistsMechanId(List<Integer> idList);

    /**
     * 获取机构下的医生
     * @param mechanId
     */
    List<DoctorDetail> getDoctorList(Integer mechanId);

    /**
     * 迁移医生数据
     */
    void moveDoctorToMechanRank(DoctorToMechanReq doctorToMechanReq);

    /**
     *  机构审核
     */
    void insertRankApply(MechanRankApplyAddReq mechanRankApplyAddReq);

    /**
     * 注销列表
     */
    IPage<MechanRankPageRes>  removeMechanRankPage(MechanRankPageReq req);
}
